var createError = require('http-errors');   // 记录http 异常 
var express = require('express');    
var path = require('path');   // 路径 Node自带的  
var cookieParser = require('cookie-parser'); // 处理 cookies
var logger = require('morgan');  // 日志处理  

var indexRouter = require('./routes/index');   // 路由模块  
var usersRouter = require('./routes/users');
var commentRouter = require('./routes/comment')
var vueRouter = require('./routes/vue')
var reactRouter = require('./routes/react')
var apiRouter = require('./routes/api')


var cors = require("cors")
var app = express();   // 处理得到 app 对象  包含了 express 所有的方法  

app.use(cors({
    
}));   // 使用cors 跨域资源共享     

// view engine setup
app.set('views', path.join(__dirname, 'views'));  // views 替换到  根目录 __dirname (/)
app.set('view engine', 'ejs');    // ejs 加载HTML格式的文件 

app.use(logger('dev'));   // 记录 开发环境的日志
app.use(express.json());  //   处理 POST  传递的参数   req.body 
app.use(express.urlencoded({ extended: false }));  //   
app.use(cookieParser());  // 处理cookies 
app.use(express.static(path.join(__dirname, 'public')));  // express.static 静态公共文件  public 替换成 根目录 

app.use(function(req,res,next){
    console.log("wh2010-daydayup-express")
    next()
})

require("./utils/connect")    // 链接 mongodb 数据库  


var session = require("express-session")

app.use(session({
    secret: '12345',
    name: 'name',
    cookie: {maxAge: 60000 * 60  * 2 },    // 过期时间  60000/60 = 1000min / 60 = 16 
    resave: false, 
    saveUninitialized: true
}));


// 设置路由中间件  
app.use('/', indexRouter);
app.use('/users', usersRouter);   // 避免命名冲突 
app.use("/comment",commentRouter)
app.use("/vue", vueRouter)
app.use("/react", reactRouter)
app.use("/api",apiRouter)



app.use(function(req,res,next){
    console.log("这是一个 自定义的 中间件  ")
    next()
})

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));   // next 进入下一个中间件 
});


// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');

});

module.exports = app;
